﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using WpfApplication2.UserControls;
using WpfApplication2.SindicatoWebService;
using WpfApplication2.Helpers;
using System.Windows.Input;
using WpfApplication2.Views.Afiliado;
using System.Windows;

namespace WpfApplication2.ViewModels.Afiliado
{
    public class ConsultarAfiliadoViewModel : ViewModel
    {
        #region properties

        public SindicatoWebService.Service1SoapClient WS;
        public Instancias Instancias { get; set; }


        public AfiliadoDTO Afiliado
        {
            get
            {
                return afiliado;
            }
            set
            {
                if (afiliado != value)
                {
                    afiliado = value;
                    RaisePropertyChanged("Afiliado");
                }
            }
        }
        private AfiliadoDTO afiliado;


        public EmpresaDTO Empresa
        {
            get
            {
                return empresa;
            }
            set
            {
                if (empresa != value)
                {
                    empresa = value;
                    RaisePropertyChanged("Empresa");
                }
            }
        }
        private EmpresaDTO empresa;


        public string FechaNacimiento
        {
            get
            {
                return fechaNacimiento;
            }
            set
            {
                if (fechaNacimiento != value)
                {
                    fechaNacimiento = value;
                    RaisePropertyChanged("FechaNacimiento");
                }
            }
        }
        private string fechaNacimiento;


        public string FechaExcepcion
        {
            get
            {
                return fechaExcepcion;
            }
            set
            {
                if (fechaExcepcion != value)
                {
                    fechaExcepcion = value;
                    RaisePropertyChanged("FechaExcepcion");
                }
            }
        }
        private string fechaExcepcion;


        public string Provincia
        {
            get
            {
                return provincia;
            }
            set
            {
                if (provincia != value)
                {
                    provincia = value;
                    RaisePropertyChanged("Provincia");
                }
            }
        }
        private string provincia;

        
        public string Localidad
        {
            get
            {
                return localidad;
            }
            set
            {
                if (localidad != value)
                {
                    localidad = value;
                    RaisePropertyChanged("Localidad");
                }
            }
        }
        private string localidad;


        public string Parentesco
        {
            get
            {
                return parentesco;
            }
            set
            {
                if (parentesco != value)
                {
                    parentesco = value;
                    RaisePropertyChanged("Parentesco");
                }
            }
        }
        private string parentesco;

        public Visibility DesactivarVisibility
        {
            get
            {
                return desactivarVisibility;
            }
            set
            {
                if (desactivarVisibility != value)
                {
                    desactivarVisibility = value;
                    RaisePropertyChanged("DesactivarVisibility");
                }
            }
        }
        private Visibility desactivarVisibility;


        public Visibility ActivarVisibility
        {
            get
            {
                return activarVisibility;
            }
            set
            {
                if (activarVisibility != value)
                {
                    activarVisibility = value;
                    RaisePropertyChanged("ActivarVisibility");
                }
            }
        }
        private Visibility activarVisibility;
        #endregion


        public ConsultarAfiliadoViewModel(Instancias instancias, AfiliadoDTO afiliado)
        {
            WS = new SindicatoWebService.Service1SoapClient();
            Afiliado = afiliado;
            Instancias = instancias;
            CargarDatos();
        }

        private void CargarDatos()
        {
            if (Afiliado != null)
            {
                FechaNacimiento = Afiliado.FechaNacimiento != null ? Afiliado.FechaNacimiento.GetValueOrDefault().ToShortDateString() : "";
                FechaExcepcion = Afiliado.FechaExcepcion != null ? Afiliado.FechaExcepcion.GetValueOrDefault().ToShortDateString() : "";


                if (Afiliado.FechaExcepcion == null)
                {
                    DesactivarVisibility = Visibility.Visible;
                    ActivarVisibility = Visibility.Collapsed;
                }
                else
                {
                    DesactivarVisibility = Visibility.Collapsed;
                    ActivarVisibility = Visibility.Visible;
                }
            }
            else
            {
                Instancias.ModalDialog.ShowHandlerDialog(String.Format("Seleccione un Registro por favor"));
            }
        }

        #region Editar Afiliado

        private DelegateCommand editarAfiliado;

        public ICommand EditarAfiliado
        {
            get
            {
                if (editarAfiliado == null)
                {
                    editarAfiliado = new DelegateCommand(Editar, CanExecute);
                }
                return editarAfiliado;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void Editar()
        {
            Instancias.FrameContent.Content = new EditarAfiliado(Instancias, Afiliado);
        }

        #endregion

        #region Command Dar de baja Afiliado

        private DelegateCommand desactivarAfiliado;

        public ICommand DesactivarAfiliado
        {
            get
            {
                if (desactivarAfiliado == null)
                {
                    desactivarAfiliado = new DelegateCommand(Desactivar, CanExecute);
                }
                return desactivarAfiliado;
            }
        }

        private void Desactivar()
        {
            string res = Instancias.BajaDialog.ShowHandlerDialog();
            if (res[0].ToString() == "1")
            {
                string[] resultados = res.Split('|');
                var motivo = resultados.Count() > 1 ? resultados[1] : string.Empty;
                var fechaExcepcion = DateTime.Now;
                WS.DesactivarAfiliado(Afiliado.Id, motivo, fechaExcepcion);
                var af = WS.ObtenerAfiliadoPorId(Afiliado.Id);
                Instancias.ModalDialog.ShowHandlerDialog("El Afiliado ha sido desactivado correctamente.");
                Instancias.FrameContent.Content = new ConsultarAfiliado(Instancias, af);
            }
        }

        #endregion

        #region Command Acitvar Afiliado que estaba dado de baja

        private DelegateCommand activarAfiliado;

        public ICommand ActivarAfiliado
        {
            get
            {
                if (activarAfiliado == null)
                {
                    activarAfiliado = new DelegateCommand(Activar, CanExecute);
                }
                return activarAfiliado;
            }
        }

        private void Activar()
        {
            WS.ActivarAfiliado(Afiliado.Id);
            var af = WS.ObtenerAfiliadoPorId(Afiliado.Id);
            Instancias.ModalDialog.ShowHandlerDialog("El Afiliado ha sido activado correctamente.");
            Instancias.FrameContent.Content = new ConsultarAfiliado(Instancias, af);
        }

        #endregion
    }
}
